if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
  # MSVC builds fail at runtime. Benchmarks are linux-only for now.
  message(STATUS "Thrust benchmarking is not available on MSVC.")
  return()
endif()

add_custom_target(thrust.all.bench)

foreach(thrust_target IN LISTS THRUST_TARGETS)
  thrust_get_target_property(config_host ${thrust_target} HOST)
  thrust_get_target_property(config_device ${thrust_target} DEVICE)
  thrust_get_target_property(config_prefix ${thrust_target} PREFIX)

  # Skip non cpp.cuda targets:
  if (NOT config_host   STREQUAL "CPP" OR
      NOT config_device STREQUAL "CUDA")
    continue()
  endif()

  set(bench_target ${config_prefix}.bench)

  add_executable(${bench_target} bench.cu)
  target_link_libraries(${bench_target} PRIVATE ${thrust_target})
  target_include_directories(${bench_target} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
  thrust_clone_target_properties(${bench_target} ${thrust_target})
  thrust_fix_clang_nvcc_build_for(${bench_target})

  add_dependencies(thrust.all.bench ${bench_target})
  add_dependencies(${config_prefix}.all ${bench_target})
endforeach()
